/*
 * Copyright (C) 2009 2DAI
 *
 * Este programa es Software Libre; usted puede redistribuirlo
 * y/o modificarlo bajo los términos de la "GNU General Public
 * License" como lo publica la "FSF Free Software Foundation",
 * o (a su elección) de cualquier versión posterior.
 *
 * Este programa es distribuido con la esperanza de que le será
 * útil, pero SIN NINGUNA GARANTIA; incluso sin la garantía
 * implícita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en
 * particular. Vea la "GNU General Public License" para más
 * detalles.
 *
 * Usted debe haber recibido una copia de la "GNU General Public
 * License" junto con este programa, si no, escriba a la "FSF
 * Free Software Foundation, Inc.", 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 */
package data;

import java.sql.ResultSet;

import java.sql.SQLException;
import on.Record;
import util.Errors;

/**
 *
 * Author: Pablo Martinez Piles
 *
 */
public class DataRecord extends DataManager<Record> {

    DataPlayers jugadores;
    DataReferee arbitros;
    DataTeam equipos;

    public DataRecord() {
        super();
        super.setTabla("record");
        jugadores = new DataPlayers();
        arbitros=new DataReferee();
        equipos=new DataTeam();

        
    }

    @Override
    public void requerir() {
        String sentencia = "SELECT fecha,class,local_team,visiting_team,league," +
                "mesa,local_delegate,visiting_delegate,referee,local_coach,visiting_coach," +
                "playerA,playerB,playerC,playerX,playerY,playerZ,double_playerA," +
                "double_playerB,double_playerX,double_playerZ," +
                "games_result," +
                "games_winner,verified,result1,result2,result3,result4,result5,result6,result7,id_record FROM record";
        try {
            sql.conectar();
            ResultSet resultado = sql.ejecutarSelect(sentencia);
            int res;
            
            while (resultado.next()) {
                Record r = new Record();
                r.setId(resultado.getInt(32));
                r.setDia(resultado.getDate(1));
                r.setCategoria(resultado.getString(2));
                r.setEquipoLocal(equipos.obtenerEquipo(resultado.getInt(3)));
                r.setEquipoVisitante(equipos.obtenerEquipo(resultado.getInt(4)));
                r.setLiga(resultado.getString(5));
                r.setMesa(resultado.getString(6));
                r.setDelegadoLocal(resultado.getString(7));
                r.setDelegadoVisitante(resultado.getString(8));
                r.setEntrenadorLocal(resultado.getString(10));
                r.setEntrenadorVisitante(resultado.getString(11));
                r.setJugadorA(jugadores.obtenerJugador(resultado.getInt(12)));
                r.setJugadorB(jugadores.obtenerJugador(resultado.getInt(13)));
                r.setJugadorC(jugadores.obtenerJugador(resultado.getInt(14)));
                r.setJugadorX(jugadores.obtenerJugador(resultado.getInt(15)));
                r.setJugadorY(jugadores.obtenerJugador(resultado.getInt(16)));
                r.setJugadorZ(jugadores.obtenerJugador(resultado.getInt(17)));
                r.setDoblesA(jugadores.obtenerJugador(resultado.getInt(18)));
                r.setDoblesB(jugadores.obtenerJugador(resultado.getInt(19)));
                r.setDoblesY(jugadores.obtenerJugador(resultado.getInt(20)));
                r.setDoblesZ(jugadores.obtenerJugador(resultado.getInt(21)));
                r.setVerified(resultado.getBoolean(24));
                r.setGames_winner(resultado.getString(23));
                r.setGames_result(resultado.getString(22));
                res = resultado.getInt(25);
                r.setResultados(resultados(res), 0);
                res = resultado.getInt(26);
                r.setResultados(resultados(res), 1);
                res = resultado.getInt(27);
                r.setResultados(resultados(res), 2);
                res = resultado.getInt(28);
                r.setResultados(resultados(res), 3);
                res = resultado.getInt(29);
                r.setResultados(resultados(res), 4);
                res = resultado.getInt(30);
                r.setResultados(resultados(res), 5);
                res = resultado.getInt(31);
                r.setResultados(resultados(res), 6);

                //lo guardamos en un arrayList
                getList().add(r);


            }
        } catch (SQLException ex) {
            Errors.creaError("ERROR: No se han podido conseguir los datos\n" + ex.getMessage(), ex.getStackTrace());
        } catch (Exception ex) {
            Errors.creaError("ERROR: No se pueden mostrar los datos\n" + ex.getMessage(), ex.getStackTrace());
        } finally {
            sql.desconectar();

        }

    }

    public Record requerir(int id) {
        String sentencia = "SELECT fecha,class,local_team,visiting_team,league," +
                "mesa,local_delegate,visiting_delegate,referee,local_coach,visiting_coach," +
                "playerA,playerB,playerC,playerX,playerY,playerZ,double_playerA," +
                "double_playerB,double_playerX,double_playerZ," +
                "games_result," +
                "games_winner,verified,result1,result2,result3,result4,result5,result6,result7,id_record, local_social FROM record " +
                "WHERE id_record=" + id;
        Record r = null;
        try {
            sql.conectar();
            ResultSet resultado = sql.ejecutarSelect(sentencia);
            int res;

            while (resultado.next()) {
                r = new Record();
                r.setId(resultado.getInt(32));
                r.setDia(resultado.getDate(1));
                r.setCategoria(resultado.getString(2));
                r.setEquipoLocal(equipos.obtenerEquipo(resultado.getInt(3)));
                r.setEquipoVisitante(equipos.obtenerEquipo(resultado.getInt(4)));
                r.setLiga(resultado.getString(5));
                r.setMesa(resultado.getString(6));
                r.setDelegadoLocal(resultado.getString(7));
                r.setDelegadoVisitante(resultado.getString(8));
                r.setArbitro(arbitros.obtenerArbitro(resultado.getInt(9)));
                r.setEntrenadorLocal(resultado.getString(10));
                r.setEntrenadorVisitante(resultado.getString(11));
                r.setJugadorA(jugadores.obtenerJugador(resultado.getInt(12)));
                r.setJugadorB(jugadores.obtenerJugador(resultado.getInt(13)));
                r.setJugadorC(jugadores.obtenerJugador(resultado.getInt(14)));
                r.setJugadorX(jugadores.obtenerJugador(resultado.getInt(15)));
                r.setJugadorY(jugadores.obtenerJugador(resultado.getInt(16)));
                r.setJugadorZ(jugadores.obtenerJugador(resultado.getInt(17)));
                r.setDoblesA(jugadores.obtenerJugador(resultado.getInt(18)));
                r.setDoblesB(jugadores.obtenerJugador(resultado.getInt(19)));
                r.setDoblesY(jugadores.obtenerJugador(resultado.getInt(20)));
                r.setDoblesZ(jugadores.obtenerJugador(resultado.getInt(21)));
                r.setVerified(resultado.getBoolean(24));
                r.setGames_winner(resultado.getString(23));
                r.setGames_result(resultado.getString(22));
                res = resultado.getInt(25);
                r.setResultados(resultados(res), 0);
                res = resultado.getInt(26);
                r.setResultados(resultados(res), 1);
                res = resultado.getInt(27);
                r.setResultados(resultados(res), 2);
                res = resultado.getInt(28);
                r.setResultados(resultados(res), 3);
                res = resultado.getInt(29);
                r.setResultados(resultados(res), 4);
                res = resultado.getInt(30);
                r.setResultados(resultados(res), 5);
                res = resultado.getInt(31);
                r.setResultados(resultados(res), 6);
                r.setLocalSocial(resultado.getString(33));
            }
        } catch (SQLException ex) {
            Errors.creaError("ERROR: No se han podido conseguir los datos\n" + ex.getMessage(), ex.getStackTrace());
        } catch (Exception ex) {
            Errors.creaError("ERROR: No se pueden mostrar los datos, contacte con su administrador\n" + ex.getMessage(), ex.getStackTrace());
        } finally {
            sql.desconectar();
            return r;
        }

    }

    /**
     * Metodo que le pasas un identificador para recojer en un String[]
     * los 5 resultados
     * @param int id
     * @return String[] resultados
     */
    private String[] resultados(int id) {
        String[] resultados = new String[5];
        String sentencia = "SELECT * FROM result WHERE id_result=" + id;
        try {
            sql.conectar();
            ResultSet resultado = sql.ejecutarSelect(sentencia);
            resultado.next();
            resultados[0] = resultado.getString(3);
            resultados[1] = resultado.getString(4);
            resultados[2] = resultado.getString(5);
            resultados[3] = resultado.getString(6);
            resultados[4] = resultado.getString(7);


            
        } catch (SQLException ex) {
            Errors.creaError("ERROR: No se han podido conseguir los datos\n" + ex.getMessage(), ex.getStackTrace());
        } catch (Exception ex) {
            Errors.creaError("ERROR: No se pueden mostrar los datos\n" + ex.getMessage(), ex.getStackTrace());
        } finally {
            sql.desconectar();
            return resultados;

        }
    }

    @Override
    public void crear(String tabla) {
    }

    @Override
    public void guardar(Record o) {

        
        
        
        String sentencia = "UPDATE FROM record SET date='"+o.getDia()+
                "',class='"+o.getCategoria()+"',local_team="+o.getEquipoLocal().getId_equipo()+
                ",visiting_team="+o.getEquipoVisitante().getId_equipo()+", league='"+o.getLiga()+
                "',table='"+o.getMesa()+"',local_delegate="+o.getDelegadoLocal()+
                ",visiting_delegate ='"+o.getDelegadoVisitante()+"' where id_record = "+o.getId();
        sql.conectar();
        sql.ejectarUpdate(sentencia);
        sql.desconectar();



    }

    @Override
    public void insertar(Record o) {
        int maximo = sacarIDResultado();
        String[][] resultados = o.getResults();
        int[] ids = new int[7];
        for (int cont = 0; cont <= 6; cont++, maximo++) { 
            ids[cont] = maximo;
        }
        String sentencia = "INSERT INTO record(date,class,local_team,visiting_team,league," +
                "table,local_delegate,visiting_delegate,referee,local_coach,visiting_coach," +
                "playerA,playerB,playerC,playerX,playerY,playerZ,double_playerA," +
                "double_playerB,double_playerX,double_playerZ," +
                "games_result," +
                "games_winner,verified,result1,result2,result3,result4,result5,result6,result7)" +
                " VALUES(" + o.getDia() + ",'" + o.getCategoria() + "','" + o.getEquipoLocal() + "'" +
                ",'" + o.getEquipoVisitante() + "','" + o.getLiga() + "','" + o.getMesa() + "'" +
                ",'" + o.getDelegadoLocal() + "','" + o.getDelegadoVisitante() + "','" + o.getArbitro() + "'" +
                ",'" + o.getEntrenadorLocal() + "','" + o.getEntrenadorVisitante() + "'," + o.getJugadorA().getId_jugadores() + "" +
                "," + o.getJugadorB().getId_jugadores() + "," + o.getJugadorC().getId_jugadores() + "" +
                "," + o.getJugadorX().getId_jugadores() + "," + o.getJugadorY().getId_jugadores() + "" +
                "," + o.getJugadorZ().getId_jugadores() + "," + o.getDoblesA().getId_jugadores() + "" +
                "," + o.getDoblesB().getId_jugadores() + "," + o.getDoblesY().getId_jugadores() + "" +
                "," + o.getDoblesZ().getId_jugadores() + ",'" + o.getGames_result() + "','" + o.getGames_winner() + "'" +
                "," + o.getVerified() + "," + ids[0] + "," + ids[2] + "," + ids[3] + "," + ids[4] + "," + ids[5] + "," + ids[6] + ");";
        for (int cont = 0; cont <= 6; cont++) {
            StringBuilder sentencia2 =new StringBuilder( "INSERT INTO result (id_result,result1,result2,result3,result4,result5,result6,result7)" +
                    "VALUES(" + ids[cont] + "," + resultados[cont][0] + "," + resultados[cont][1] + "," + resultados[cont][2] + "," + resultados[cont][3] + "," + resultados[cont][4] +
                    "," + resultados[cont][5] + "," + resultados[cont][6] + ")");
            sql.ejectarUpdate(sentencia2.toString());
        }
        sql.conectar();
        sql.ejectarUpdate(sentencia);
        sql.desconectar();



    }

    private int sacarIDResultado() {
        String sentencia = "SELECT MAX(id_result) FROM result;";
        ResultSet resultado = null;
        int maximo = 0;
        try {
            sql.conectar();
            resultado = sql.ejecutarSelect(sentencia);
            resultado.next();
            maximo = resultado.getInt(1);
        } catch (SQLException ex) {
        } finally {
            sql.desconectar();
            return maximo;

        }
    }

    @Override
    public void eliminar(Record o) {
        // TODO code application logic here
    }
}
